#include "log.h"
#include "mf_uart.h"
#include <stdio.h>
#include <stdarg.h>

/**
 * @brief fputc
 *
 * @param ch
 * @param *f
 * @return ch
 */
int fputc(int ch, FILE *f)
{
    (void)f;
    uart0_send_byte((const char)ch); /* send char */
    return ch;
}

/**
 * @brief my_log_printf
 * 
 * @note  自定义的日志输出函数
 * @param tag
 * @param level
 * @param format
 * @param ...
 */
void log_printf(const char *tag, my_log_level_t level, const char *format, ...)
{
    // 输出日志级别和标签
    printf("[%s]", tag);
    switch (level)
    {
    case MY_LOG_ERROR:
        printf("[E]");
        break;
    case MY_LOG_WARN:
        printf("[W]");
        break;
    case MY_LOG_INFO:
        printf("[I]");
        break;
    case MY_LOG_DEBUG:
        printf("[D]");
        break;
    case MY_LOG_VERBOSE:
        printf("[V]");
        break;
    default:
        break;
    }

    // 输出格式化字符串
    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end(args);
}

/**
 * @brief error_handler_msg_log
 *
 * @param msg error message
 */
void error_handler_msg_log(char *file_msg, const char *func_msg)
{
    /* Start peintf error message, don't use rtos_log  */
    printf("Error file      : %s\r\n", file_msg);
    printf("Error function  : %s\r\n", func_msg);
}